﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Infra.Common.DAO
{
    public class ProdutoDAL // : IDisposable
    {
        public static void Salvar(Infra.Entity.STKPRODUTO produto)
        {

            using (Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext())
            {
                if (produto.CODProduto != 0)
                {
                    //Alterar o produto
                    var prod = dc.STKPRODUTOs.Single(pd => pd.CODProduto == produto.CODProduto);
                    prod.proNome = produto.proNome;
                    prod.proData = produto.proData;
                    prod.proPreco = produto.proPreco;
                    prod.proQuantidade = produto.proQuantidade;
                    //prod.proStatus = produto.proStatus;
                    prod.proStockMinimo = produto.proStockMinimo;
                    prod.CODTipoProd = produto.CODTipoProd;
                    dc.SubmitChanges();
                }
                else
                {
                    //Salvar o produto
                    dc.STKPRODUTOs.InsertOnSubmit(produto);
                    dc.SubmitChanges();
                }
            }
        }

        public static void Excluir(int idProduto)
        {
             using (Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext())
            {
                var prod = dc.STKPRODUTOs.Single(pd => pd.CODProduto == idProduto);
                dc.STKPRODUTOs.DeleteOnSubmit(prod);
                dc.SubmitChanges();
            }
        }

        public static List<Infra.Entity.STKPRODUTO> Pesquisar(int codigo, String nome, long tipo, DateTime data)
        {
            List<Infra.Entity.STKPRODUTO> produtos = null;
            using (Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext())
            {
                var prod = from produto in dc.STKPRODUTOs
                           where ((codigo.Equals(0) || codigo.Equals(produto.CODProduto)) &&
                                   (nome.Equals(string.Empty) || nome.Equals(produto.proNome.Contains(nome))) &&
                                   (tipo.Equals(0) || tipo.Equals(produto.CODTipoProd)) &&
                               //     (status.Equals("") || status.Equals(status)) &&
                                   (data.Equals(null) || data.Equals(data)))

                           select produto;
                produtos = prod.ToList();
            }
            return produtos;
        }


        public static List<Infra.Entity.STKPRODUTO> Pesquisar()
        {
            List<Infra.Entity.STKPRODUTO> produtos = null;
            using (Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext())
            {
                var prod = from produto in dc.STKPRODUTOs
                         
                           select produto;
                produtos = prod.ToList();
            }
            return produtos;
        }


        public static List<Infra.Entity.STKPRODUTO> PesquisarSP(int codigo, String nome, int tipo, DateTime data, char status)
        {
            List<Infra.Entity.STKPRODUTO> produtos = null;
            // Pesquisa usando Stored procedure
            using (Infra.Entity.DBInfraEntityDataContext dc = new Entity.DBInfraEntityDataContext())
            {
               // var prod = dc.SP_PESQUISA_PRODUTO(codigo, nome, tipo, data, status);
               //produtos = prod.ToList();
            }
            return produtos;
        }



      /*  public void Dispose()
        {
            throw new NotImplementedException();
        }*/
    }
}
